import JSZip from 'jszip'
import { saveAs } from 'file-saver'
import axios from 'axios'
import { getToken } from '@/utils/auth'
export default {
    /**
     * 绑定时间范围搜索参数
     * @param {Object} params 参数对象
     * @param {Array} dateRange 时间范围数组
     * @param {String} propName 属性名字
     */
    bindDateRangeSearch(params, dateRange, propName) {
        dateRange = Array.isArray(dateRange) ? dateRange : [];
        if (typeof (propName) === 'undefined') {
            params['beginTime'] = dateRange[0];
            params['endTime'] = dateRange[1];
        } else {
            params[propName + 'Begin'] = dateRange[0];
            params[propName + 'End'] = dateRange[1];
        }
    },
    /**
     * 在对象数组中找到一个属性值和参数相等的一条记录
     * @param {Array} arrObj 对象数组
     * @param {String} field 对象数组内的对象属性
     * @param {String|Number} param 参数
     * @returns 
     */
    arrayFilterOneResult(arrObj, field, param) {
        if (arrObj) {
            let arr = arrObj.filter(o => o[field] === param);
            if (Array.isArray(arr) && arr.length > 0) {
                return arr[0];
            }
        }
        return null;
    },
    /**
        * 在对象数组中找到一个属性值和参数相等的一条记录
        * @param {object} Obj 接受参数对象
        * arrFileObj 对象数组
        * filePath 文件下载路径字段
        * folderName 文件夹名字
        * fileName 文件自定义名字
        * jszipName 文件自定义名字
        * @returns 
        */
    jszipDown(Obj) {
        console.log(Obj);
        
        function getUrlFile(url) {
            return new Promise((resolve, reject) => {
                axios({
                    method: 'post',
                    headers: {
                        'Authorization': 'Bearer ' + getToken(),
                        'Content-Type': 'application/json; application/octet-stream'
                    },
                    responseType: 'blob',
                    data: { url },
                    url: process.env.VUE_APP_BASE_API + '/common/proxy/download'
                }).then(res => {
                    resolve(res.data)
                }).catch(err => {
                    reject(err.toString())
                })
            })
        };
        const zip = new JSZip()
        const promiseList = [];
        Obj.arrFileObj.forEach(file => {
            if (file) {
                let fName = ''
                if (Obj.fileName) {
                    let format = file[Obj.filePath].split('.')
                    format = format[format.length - 1]
                    let nameL = Obj.fileName.split(',')
                    let name = nameL.map(item=>file[item]).join('-')
                    fName = name+'.'+format
                }else{
                    fName = file[Obj.filePath].split('/')
                    fName = fName[fName.length - 1]
                }
                const promise = getUrlFile(file[Obj.filePath]).then(data => {
                    if (Obj.folderName) {
                        zip.folder(file[Obj.folderName]).file(fName, data,{binary: true})
                    } else {
                        zip.file(fName, data)
                    }
                });
                promiseList.push(promise);
            }
        });
        Promise.all(promiseList).then(res => {
            zip.generateAsync({ type: 'blob' }).then(data => saveAs(data, Obj.jszipName?Obj.jszipName:'文件压缩包.zip'))
        }).catch(err => {
            console.log(err);
        });
    }

}

